Le 26 mars 2018

Plan du module

Ce cours est un TD informatique constitue d'exemples et d'exercices du langage de programmation R sur la data visualisation. Les différents points abordes durant ces 15 heures de cours sont :

  • Extraction et manipulation des données (data mining)
  • Représentations graphiques
  • Valorisations de ces données par le biais de méthodes statistiques et de visualisations
  • Représentations graphiques interactives (html widget, plotly …)
  • Shiny et R markdown création d'application et de rapport interactif

Plan de ce cours

Les 3 premières heures seront consacrées à une intro sur la data science et des rappels sur R

  • Définition et cadre

Extraction et manipulation de données (data mining)

  • Principe de base de la data visualisation (infographie)
  • Rappels sur R
  • Objets R (variable, programme et fonction)
  • importer des données depuis le web
  • graphiques simples

Contexte

Une Réalité Big Data

https://www.seagate.com/fr/fr/our-story/data-age-2025

\[ 1 Zo \simeq 10^{12} Go \]

De 3500 avant J.C, jusqu'à l'an 2000 l'Homme a accumulé \(5\,000\,000\,000 Go \simeq 0.005 Zo\). En 2025, les projections annonce \(40 Zo\)

Méga Données ?

Définition Big Data

"Big data is a term that describes large volumes of high velocity, complex and variable data that require advanced techniques and technologies to enable the capture, storage, distribution, management, and analysis of the information."

TechAmerica Foundation's Federal Big Data Commission, 2012

Data visualation

Définition

  • communiquer des données de façon visuelle

  • transformer des données en information

  • résultats graphiques clairs et compréhensibles

Exemple

Principes d'infographie

  • mémoire courte quelques secondes d'attention ou de réflexion
  • un max de \(\simeq 11\) types de couleurs ou de styles différents facilement distinguables
  • notion de perspective données et vérités

  • source "How to Lie With Statistics", 1954, Huff

Science sous jacente les statistiques

source "How to Lie With Statistics", 1954, Huff

Un graphique vaut mille mots

Combien y a t il de A ?

  • R?ponse : 9

Pourquoi R

  • Open source & Gratuit
  • Facile à installer sur les systèmes d'exploitations Linux, Windows et Apple
  • Une très grosse communauté de développeurs et d'utilisateurs
  • Facile à utiliser pour des non-programmeurs pour des calculs statistiques
  • Possibilité de créer des illustrations, applications web et même la présentation que vous lisez actuellement

Installation de R

Pour ?tre bon en R …

  • savoir demander de l'aide une qualité essentielle d'un programmeur

  • stack overflow forum en ligne
  • suivre des exemples R blogger, git_hub …
  • commandes en console R ?? et ?
  • utiliser un environnement de travail int?gr? (IDE) comme Rstudio (facilite la programmation, auto indentation, variables historiques, etc …)

Présentation de Rstudio

Codes sources, programmes et scripts

Codes sources, programmes et scripts

  • créer un fichier texte hello.R
  • écrire votre premier programme en R
#  le Diése sert à commenter le reste de la la ligne  
# tout ce qui est écrit ici ne sera pas exécuté par R  
# indiquer le but du programme ou toutes autres informations  
# Nom  et Prénom dates 
a <- "hello World ! "
b = pi
print(a)

print(paste("pi is equal to",b))

Comment l'exécuter ?

A l'aide de la console R :

source("cours_data_visualisation/hello.R")
## [1] "hello World ! "

L'environnement de R

Ce qui a changé

  • Ajout de la commande lanc?e dans la console R dans l'historique
  • Ajout de la variable a dans l'environnement R (commande ls() pour lister les objets)

Les variables dans R

class(a)
## [1] "character"
b <- 1 
class(b)
## [1] "numeric"
#vecteurs
c <- c(1,2,3,4)
d <- c("a","b","c","d")
e <- c("a"=1,"b"=2,"c"=3,"d"=4)
f <- c(1,"a","d",4)

Les variables dans R suite

class(c)
## [1] "numeric"
class(d)
## [1] "character"
class(e)
## [1] "numeric"
class(f)
## [1] "character"

attention f ne pas m?langer les types de variables

Les Matrices

  f.m <- cbind(f)
f.m
##      f  
## [1,] "1"
## [2,] "a"
## [3,] "d"
## [4,] "4"
  c.m <- cbind(c)
  c.m
##      c
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4

Matrices num?riques ou caract?res

  m.m <- cbind(f.m,c.m)
    m.m
##      f   c  
## [1,] "1" "1"
## [2,] "a" "2"
## [3,] "d" "3"
## [4,] "4" "4"
        n.m <- cbind(c.m,c.m)
        n.m
##      c c
## [1,] 1 1
## [2,] 2 2
## [3,] 3 3
## [4,] 4 4

Limitation des matrices soit type num?rique ou caract?re

Matrices et Data frames

mat <- matrix(data = c.m, ncol=4,nrow = 3)
mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    3    2
## [2,]    2    1    4    3
## [3,]    3    2    1    4
df = data.frame("numeriques"= c, lettres=f,stringsAsFactors = F)
df 
##   numeriques lettres
## 1          1       1
## 2          2       a
## 3          3       d
## 4          4       4

Matrices et Data frames

class(mat[,1])
## [1] "numeric"
class(df[,"numeriques"])
## [1] "numeric"
class(df[,"lettres"])
## [1] "character"

Passer d'un type ? l'autre

as.matrix(df)
##      numeriques lettres
## [1,] "1"        "1"    
## [2,] "2"        "a"    
## [3,] "3"        "d"    
## [4,] "4"        "4"
as.numeric(f)
## Warning: NAs introduits lors de la conversion automatique
## [1]  1 NA NA  4

Relation logique

1==0
## [1] FALSE
1>=0
## [1] TRUE
1<=0
## [1] FALSE
"a" == "b"
## [1] FALSE

Fonctions

les commandes matrix(), cbind(), data.frame() sont des fonctions cod?es

D?finition

  • un objet R
  • des commandes R ?crites dans un fichier qui effectuent une t?che pr?d?finie
  • permet de faire automatiquement la m?me t?che plusieurs fois
  • garder un programme plus lisible
  • un gain de temps ? long terme

Ecrire votre premi?re fonction

?crire le m?me code que pr?c?demment sous forme de fonction dans un nouveau fichier hello_fun.R

hello <-function(texte=NULL){   # argument ou données d'entr?e

  #code manipulant les données d'entr?e
 
return(texte)  #  return  renvoie le r?sultat de la fonction  
}
 source("cours_data_visualisation/hello_fun.R")

 hello("hello world !")
## [1] "hello world !"

Un peu plus complique

un petit ajout le nom de l'utilisateur

hello <-function(texte=NULL){  
  #on souhaite coller le nom de l'utilisateur ? "hello world"
  # on r?cup?re le nom de l'utilisateur 
 nom <- Sys.getenv("USERNAME") # fonction trouv?e via une recherche web
   # on colle le nom de l'utilisateur
 texte <- paste(nom,texte)
 
return(texte)  #  return  renvoie le r?sultat de la fonction  
}

 source("cours_data_visualisation/hello_fun2.R")

 hello("hello world !")
## [1] "Laurent hello world !"

Fonction cor()

Vous avez ?crit une fonction comme les fonctions de base de R exemple cor() qui calcule la corr?lation des données de 2 vecteurs ou des données contenues dans une matrice

cor
## function (x, y = NULL, use = "everything", method = c("pearson", 
##     "kendall", "spearman")) 
## {
##     na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
##         "everything", "na.or.complete"))
##     if (is.na(na.method)) 
##         stop("invalid 'use' argument")
##     method <- match.arg(method)
##     if (is.data.frame(y)) 
##         y <- as.matrix(y)
##     if (is.data.frame(x)) 
##         x <- as.matrix(x)
##     if (!is.matrix(x) && is.null(y)) 
##         stop("supply both 'x' and 'y' or a matrix-like 'x'")
##     if (!(is.numeric(x) || is.logical(x))) 
##         stop("'x' must be numeric")
##     stopifnot(is.atomic(x))
##     if (!is.null(y)) {
##         if (!(is.numeric(y) || is.logical(y))) 
##             stop("'y' must be numeric")
##         stopifnot(is.atomic(y))
##     }
##     Rank <- function(u) {
##         if (length(u) == 0L) 
##             u
##         else if (is.matrix(u)) {
##             if (nrow(u) > 1L) 
##                 apply(u, 2L, rank, na.last = "keep")
##             else row(u)
##         }
##         else rank(u, na.last = "keep")
##     }
##     if (method == "pearson") 
##         .Call(C_cor, x, y, na.method, FALSE)
##     else if (na.method %in% c(2L, 5L)) {
##         if (is.null(y)) {
##             .Call(C_cor, Rank(na.omit(x)), NULL, na.method, method == 
##                 "kendall")
##         }
##         else {
##             nas <- attr(na.omit(cbind(x, y)), "na.action")
##             dropNA <- function(x, nas) {
##                 if (length(nas)) {
##                   if (is.matrix(x)) 
##                     x[-nas, , drop = FALSE]
##                   else x[-nas]
##                 }
##                 else x
##             }
##             .Call(C_cor, Rank(dropNA(x, nas)), Rank(dropNA(y, 
##                 nas)), na.method, method == "kendall")
##         }
##     }
##     else if (na.method != 3L) {
##         x <- Rank(x)
##         if (!is.null(y)) 
##             y <- Rank(y)
##         .Call(C_cor, x, y, na.method, method == "kendall")
##     }
##     else {
##         if (is.null(y)) {
##             ncy <- ncx <- ncol(x)
##             if (ncx == 0) 
##                 stop("'x' is empty")
##             r <- matrix(0, nrow = ncx, ncol = ncy)
##             for (i in seq_len(ncx)) {
##                 for (j in seq_len(i)) {
##                   x2 <- x[, i]
##                   y2 <- x[, j]
##                   ok <- complete.cases(x2, y2)
##                   x2 <- rank(x2[ok])
##                   y2 <- rank(y2[ok])
##                   r[i, j] <- if (any(ok)) 
##                     .Call(C_cor, x2, y2, 1L, method == "kendall")
##                   else NA
##                 }
##             }
##             r <- r + t(r) - diag(diag(r))
##             rownames(r) <- colnames(x)
##             colnames(r) <- colnames(x)
##             r
##         }
##         else {
##             if (length(x) == 0L || length(y) == 0L) 
##                 stop("both 'x' and 'y' must be non-empty")
##             matrix_result <- is.matrix(x) || is.matrix(y)
##             if (!is.matrix(x)) 
##                 x <- matrix(x, ncol = 1L)
##             if (!is.matrix(y)) 
##                 y <- matrix(y, ncol = 1L)
##             ncx <- ncol(x)
##             ncy <- ncol(y)
##             r <- matrix(0, nrow = ncx, ncol = ncy)
##             for (i in seq_len(ncx)) {
##                 for (j in seq_len(ncy)) {
##                   x2 <- x[, i]
##                   y2 <- y[, j]
##                   ok <- complete.cases(x2, y2)
##                   x2 <- rank(x2[ok])
##                   y2 <- rank(y2[ok])
##                   r[i, j] <- if (any(ok)) 
##                     .Call(C_cor, x2, y2, 1L, method == "kendall")
##                   else NA
##                 }
##             }
##             rownames(r) <- colnames(x)
##             colnames(r) <- colnames(y)
##             if (matrix_result) 
##                 r
##             else drop(r)
##         }
##     }
## }
## <bytecode: 0x0000000012ae58b0>
## <environment: namespace:stats>

Importer des données

Importer des données sous R

Import Dataset > from Local File

Puis vérifier que les données sont sous le bon format

Importer des données sous console R

read.csv("C:/Users/Laurent/Downloads/INSEE-29_000067684_A.csv")
##          Date  Value
## 1  2012-12-31 149017
## 2  2011-12-31 148803
## 3  2010-12-31 147571
## 4  2007-12-31 151108
## 5  2006-12-31 152337
## 6  1999-12-31 151279
## 7  1990-12-31 141404
## 8  1982-12-31 136038
## 9  1975-12-31 137591
## 10 1968-12-31 128557
## 11 1962-12-31 115273
class(read.csv("C:/Users/Laurent/Downloads/INSEE-29_000067684_A.csv"))
## [1] "data.frame"

Visualiser les données

INSEE.29_000067684_A <- read.csv("C:/Users/Laurent/Downloads/
                                 INSEE-29_000067684_A.csv")
View(INSEE.29_000067684_A)

Visualiser les données

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value)

Changer le style du graphe

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "l")

Changer le style du graphe

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "b")

Légendes

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "l",xlab ="Dates" ,
     ylab="populations")